\documentclass{article}
\usepackage{graphicx}
\usepackage{romanian}
\usepackage{multicol}

\begin{document}

\title{\textbf{Proiect 2 -- Aplica'tie Func'tii}
\\ Proiectarea  si dezvoltarea  unui  prototip de evaluare a functiilor de o singura variabila reala }
\author{Teletin Alin}
\maketitle

\begin{sloppypar}
\section{Date generale}

Scopul acestei aplica'tii este s'a trateze func'tiile de o singur'a variabil'a real'a, 'si anume, calcularea valorii simbolice 'intr-o valoare dat'a, calcularea derivatei func'tiei 'si desenarea graficului corespunz'ator.

Dezvoltarea acestei aplica'tii s-a f'acut pe structura anterioar'a a aplica'tiei de la Inginerie Software, adic'a parsarea expresiei 'intr-un arbore binar, implement'and in plus diverse sabloane de proiectare pentru mentenan't'a si posibilitate de reutilizare m'arit'a.



\includegraphics[width=1.00\textwidth]{ContentFunctii.png}

\includegraphics[width=.90\textwidth]{ContentOperatori.png}

\includegraphics[width=.50\textwidth center]{ContentArbori.png}

\section{Descrierea aplica'tiei}

\subsection{'Sablonul de proiectare Visitor}

'Sablonul de proiectare Visitor r'aspunde cerin'tei formulate de Principiul Responsabilit'a'tii Unice. Acest 'sablon de proiectare este utilizat 'in situa'tia 'in care este necesar s'a efectu'am una sau mai multe opera'tii pe elementele unei structuri de obiect. 'Sablonul de proiectare permite deﬁnirea de noi opera'tii f'ar'a a necesita modiﬁc'ari asupra obiectului asupra c'aruia urmeaz'a a se efectua acele opera'tii. Conform acestui 'sablon de proiectare ac'tiunile pe care le poate intreprinde un obiect nu vor ﬁ 'incapsulate 'in obiectul respectiv, ci va exista un obiect special creat 'si dedicat ac'tiunii pe care trebuie s'a o intreprind'a. Conform principiului responsabilit'a'tii unice este necesar ca pentru ﬁecare responsabilitate a unui obiect A s'a existe un obiect R care sa efectueze o singur'a opera'tie pe elementele structurii obiectului A. 'Sablonul de proiectare Visitor asigur'a separarea responsabilit'a'tii de obiectul 'in cauza (A) , respectiv asigura unicitatea responsabilit'a'tii, evit\^{a}nd 'in acest sens modiﬁc'ari 'in structura interna a obiectului A.

A'sadar conform principiului responsabilit'a'tii unice se cere ca pentru ﬁecare responsabilitate a obiectelor de tip nod s'a se creeze o clasa care s'a 'incapsuleze comportamentul dedicat 'indeplinirii acelei responsabilit'a'ti. Astfel se vor crea urm'atorele clase destinate a satisface responsabilit'a'tile corespunz'atoare : ToStringVisitor, DerivareVisitor, CalculVisitor, ToXMLVisitor .

Din aceasta clasa abstracta vor ﬁ derivate celelalte clase de tip visitor. Aceasta clas'a va trebui s'a furnizeze metode de inspectare pentru toate tipurile de noduri. Metodele de inspectare vor ﬁ abstracte 'si vor supra'inc'arca acela'si nume visit. Metodele de inspectare nu returneaz'a nimic, rezultatul inspec'tiei va ﬁ transmis cu ajutorul unui atribut al clasei.

Clasa Nod din pachetul arbori nu va con'tine dec\^{a}t cele trei atribute  -- nodul ﬁu stang, nodul ﬁu drept, valoarea lui x -- respectiv metodele getxxx si setxxx. 'In aceste conditii, 'in care metodele de derivare simbolica / valorica, calcul 'si toString, au fost eliminate se impune ca 'si clasa Nod s'a nu mai ﬁe o clasa abstract'a. 'In interiorul clasei Nod trebuie ad'augat'a o metoda denumit'a acceptVisitor care are ca parametru un obiect de tip Visitor 'si nu returneaz'a nimic. A accepta un visitor 'inseamna de fapt a apela o metoda a visitorului pentru vizitarea nodului curent. 'In acest scop a fost cosntruita metoda visit(Nod n). Clasa de tip abstract Visitor trebuie sa furnizeze metode de inspectare pentru obiectele concrete cat si pentru cele mai generale, care constituie generaliz'ari ale obiectelor concrete.

\includegraphics[width=.90\textwidth]{ContentVisitor.png}  

\subsection{Arbori XML}

In cazul de fata am considerat arborele XML ca fiind format din numele clasei ce se afla in nodul arborelui functional, acesta pastrand structura acestuia. 

Acestuia ii aplicam sabloanele de proiectare Command, Singleton, Visitor. 

\includegraphics[width=.90\textwidth]{ContentXML.png}  

\subsection{Parser}

Parserul realizat merge pe principiul transformarii sirului in forma poloneza postfixata pentru retinerea tuturor operatorilor, operanzilor si functiilor si astfel de a facilita punerea in arborele functional asociat expresiei. 

Acestuia i s-a aplicat sablonul de proiectare Template Method, Strategy neputand fi aplicat in acest caz.

Utilizatorul introduce functia sub forma unui String, Parserul ia acest string si pune fiecare componenta (operatori, functii sau operanzi) intr-un vector pe pozitiile corespunzatoare din String. Subclasa PostFixForm preia acet vector si ii ordoneaza elementele in forma poloneza postfixata. Aceasta ultima varianta a vectorului este transmisa mai departe clasei  TreeInsert care ia pe rand fiecare element al acestui vector, de la coada la cap creind arborele binar corespunzator functiei introduse. Pentru a-si face treaba parserul foloseste principiul cautarii profunde, cautand in string-ul primit operatorii posibili. Datorita sablonului Template Method, clasa Parser este o clasa abstracta ce lasa la alegerea subclaselor ce forma poloneza sa formeze din functia data.

\includegraphics[width=.90\textwidth]{ContentParser.png}  

\subsection{Interfata Grafica}

Interfata grafica este generata cu NetBeans si contine campurile corespunzatoare pentru introducerea functiei, valorii in care se calculeaza functia, derivata si valoarea. De asemenea butoanele de Calcul, Grafic, GenerareXML, Undo, Redo. Aceasta este simpla, sugestiva si usor de folosit de catre orice utilizator aceasta avand si mesaje de indrumare.

Asupra ei s-au aplicat sabloanele de proiectare Memento, Chain of Responsability si Command.

Proiectul are un installer care il transforma intr-o aplicatie de sine statatoare ce poate fi folosita pe orice calculator, fara a necesita cunostinte de programare. 
 
\includegraphics[width=.80\textwidth]{ContentInterfata.png}  

\section{Diagrama de clasa}

\includegraphics[width=.90\textwidth]{ClassDiagram.png}  




\end{sloppypar}
\end{document}